home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 42 / Amiga Format AFCD42 (Issue 126, Aug 1999).iso / -serious- / hardware / blizkick / aspectfont.e < prev    next >
Text File  |  1999-05-17  |  3KB  |  107 lines

  1. -> FILE: ESrc:Own/AspectFont.e          REV: 93 --- Remove "Magic" comment from guide file
  2. /* History
  3.    92     1st release.
  4.    93     Removed Enforcer hit.
  5. */
  6.  
  7. OPT OSVERSION=37
  8.  
  9. MODULE 'dos/dos','dos/dosasl','dos/rdargs','exec/memory','dos/dosextens'
  10. MODULE 'utility'
  11. MODULE 'intuition/intuition','intuition/screens','graphics/gfx',
  12.        'graphics/displayinfo'
  13.  
  14. ENUM ER_NOERR,ER_UTIL,ER_ARGS,ER_OPEN,ER_READ,ER_WRITE,ER_MEM,ER_BREAK
  15.  
  16. ENUM BUFLEN=32768
  17.  
  18. PROC main() HANDLE
  19.   DEF array:PTR TO LONG,rfh=NIL,wfh=NIL,rbuf=NIL
  20.   DEF rdargs=NIL,flen,done=FALSE,q=TRUE,ioerr,one2one=TRUE
  21.   DEF tt:PTR TO process
  22.  
  23.   array:=[0,0,0]
  24.   tt:='$VER: AspectFont 37.2 (22.3.97)\n'; tt:='$COPYRIGHT: Copyright © 1997 Harry Sintonen'
  25.   tt:=FindTask(NIL)
  26.   IF (utilitybase:=OpenLibrary('utility.library',37))=NIL THEN Raise(ER_UTIL)
  27.   IF (rdargs:=ReadArgs('FROM/A,TO/A,QUIET/S',array,NIL))=NIL THEN Raise(ER_ARGS)
  28.   q:=Not(array[2])
  29.  
  30.   IF q THEN PrintF('AspectFont 37.2 -- Fix AmigaGuide document font by screen aspect\nCopyright © 1997 Harry Sintonen.\n\n')
  31.  
  32.   flen:=FileLength(array[])
  33.   IF (rfh:=Open(array[],OLDFILE))=NIL THEN Raise(ER_OPEN)
  34.   IF (wfh:=Open(array[1],NEWFILE))=NIL THEN Raise(ER_OPEN)
  35.  
  36.   IF q THEN PrintF('Processing file \a\s\a, \d bytes...\n',array[],flen)
  37.  
  38.   IF (rbuf:=AllocVec(BUFLEN,MEMF_ANY OR MEMF_CLEAR))=NIL THEN Raise(ER_MEM)
  39.  
  40.   one2one:=getaspect(IF tt.windowptr>0 THEN tt.windowptr::window.wscreen ELSE NIL,NIL)
  41.  
  42.   REPEAT
  43.     IF CtrlC() THEN Raise(ER_BREAK)
  44.     IF Fgets(rfh,rbuf,BUFLEN)
  45.       IF one2one
  46.         IF (Strnicmp(rbuf,'@COMMENT ASPECTFONT ',STRLEN)=0)
  47.           IF q THEN PrintF(' o Enabled \s',rbuf+20)
  48.           IF FputC(wfh,"@")<>"@" THEN Raise(ER_WRITE)
  49.           IF Fputs(wfh,rbuf+20-5) THEN Raise(ER_WRITE)
  50.         ELSE
  51.           IF Fputs(wfh,rbuf) THEN Raise(ER_WRITE)
  52.         ENDIF
  53.       ELSE
  54.         IF Fputs(wfh,rbuf) THEN Raise(ER_WRITE)
  55.       ENDIF
  56.     ELSE
  57.       IF IoErr()
  58.         Raise(ER_READ)
  59.       ELSE
  60.         done:=TRUE
  61.       ENDIF
  62.     ENDIF
  63.   UNTIL done
  64.  
  65.   IF q THEN PrintF('Done!\n')
  66.  
  67. EXCEPT DO
  68.   ioerr:=IoErr()
  69.   IF rbuf THEN FreeVec(rbuf)
  70.   IF rfh THEN Close(rfh)
  71.   IF wfh THEN Close(wfh)
  72.   IF exception AND array[1] THEN DeleteFile(array[1])
  73.   IF rdargs THEN FreeArgs(rdargs)
  74.   IF utilitybase THEN CloseLibrary(utilitybase)
  75.  
  76.   IF exception
  77.     IF exception=ER_BREAK; ioerr:=ERROR_BREAK; ENDIF
  78.     IF (exception="NEW") OR (exception="MEM") THEN exception:=ER_MEM
  79.     IF ioerr AND q THEN PrintFault(ioerr,'AspectFont')
  80.     IF q AND ioerr<>ERROR_BREAK THEN
  81.       PrintF('Error: Could not \s!\n',
  82.               ListItem(['','open utillity.library V37','get arguments','open file','read file','write file',
  83.                         'allocate enough memory',''],exception))
  84.     RETURN 10
  85.   ENDIF
  86. ENDPROC
  87.  
  88. PROC getaspect(inscr,name:PTR TO CHAR)
  89.   DEF ret=FALSE,scr:PTR TO screen,dinfo:displayinfo,scale
  90.  
  91.   IF inscr
  92.     scr:=inscr
  93.   ELSE
  94.     IF (scr:=LockPubScreen(name))=NIL THEN RETURN ret
  95.   ENDIF
  96.  
  97.   IF GetDisplayInfoData(NIL,dinfo,SIZEOF displayinfo,DTAG_DISP,GetVPModeID(scr.viewport))
  98.     scale:=Div(Mul(dinfo.resolution.x,10),dinfo.resolution.y)
  99.     -> PrintF('Ratioh: \d Ratiov: \d Scale=\d\n',dinfo.resolution.x,dinfo.resolution.y,scale)
  100.     IF (scale>=3) AND (scale<=6) THEN ret:=TRUE
  101.   ENDIF
  102.  
  103.   IF Not(inscr)
  104.     UnlockPubScreen(name,NIL)
  105.   ENDIF
  106. ENDPROC ret
  107.